package org.otherworld.process;


import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import java.io.LineNumberReader;
import java.util.Hashtable;
import java.util.Iterator;

import org.otherworld.property.PropertyLoader;

public class WindowsDXGraphicsInfo {
	private Hashtable<String, String> info;

	public WindowsDXGraphicsInfo() {
		info = new Hashtable<String, String>();
	}

	/**
	 * Futtatja a dxdiag programot
	 * @param command (String parancs, amit lefuttat)
	 * @throws IOException 
	 * @throws InterruptedException
	 */
	private void runDxDiag(String command) throws IOException,
			InterruptedException {
		Runtime rt = Runtime.getRuntime();
		Process pr = rt.exec(command);
		
		pr.waitFor();
	}

	/**
	 * Inicializálja a dxdiag futtatását és kigyűjti az adatokat, majd törli a tempfájlt
	 * @param command (String parancs, amit futtat)
	 * @param tempdir (String tempkönyvtár)
	 * @param tempfile (String tempfájl)
	 * @throws FileNotFoundException
	 * @throws IOException
	 * @throws InterruptedException
	 */
	public void init(String command, String tempdir, String tempfile)
			throws FileNotFoundException, IOException, InterruptedException {
		this.runDxDiag(command);
		this.readTempFile(tempdir, tempfile);
		File f = new File(tempdir+tempfile);
		System.out.println(tempdir+tempfile);
		f.delete();

	}

	/**
	 * A dxdiag által készített fájlból kiolvassa a szükséges információkat
	 * @param tempdir (String tempkönyvtár)
	 * @param tempfile (String tempfájl)
	 * @throws FileNotFoundException
	 * @throws IOException
	 */
	private void readTempFile(String tempdir, String tempfile)
			throws FileNotFoundException, IOException {
		LineNumberReader linereader = new LineNumberReader(new FileReader(
				new File(tempdir + tempfile)));
		String line = "";
		while ((line = linereader.readLine()) != null) {
			this.collectInfo(line);
		}
		linereader.close();
	}

	/**
	 * Visszaadja a rendszerinformációkat egy hashtable-ban
	 * @return
	 */
	public Hashtable<String, String> getDXInfo() {
		return this.info;
	}

	/**
	 * A megnyitott fájl-t dolgozza fel
	 * @param line (String a fájl aktuális sora)
	 */
	private void collectInfo(String line) {
		line = line.trim();
		if (line.startsWith("Machine name")) {
			info.put("machinename", line);
		} else if (line.startsWith("Operating system")) {
			info.put("opsys", line);
		} else if (line.startsWith("System manufacturer")) {
			info.put("manufacturer", line);
		} else if (line.startsWith("System Model")) {
			info.put("model", line);
		} else if (line.startsWith("BIOS")) {
			info.put("bios", line);
		} else if (line.startsWith("Processor")) {
			info.put("processor", line);
		} else if (line.startsWith("DirectX Version")) {
			info.put("directx_version", line);
		} else if (line.startsWith("Card Name")) {
			info.put("video_card", line);
		} else if (line.startsWith("Chip type")) {
			info.put("chip_type", line);
		} else if (line.startsWith("Current mode")) {
			info.put("current_resolution", line);
		} else if (line.startsWith("Display memory")) {
			info.put("video_memory", line);
		}
	}


}
